﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using POSGui.Clases.Entities;
using POSGui.Presentacion;

namespace POSGui.Classes.BusinessLogic
{
    public class WebServiceAgent
    {
        #region Attributes
        private ERPSIA.IPointOfSaleServiceContract _webService;
        private ERPSIA.Item[] _items;
        private ERPSIA.Currency[] _currencies;
        private ERPSIA.StoreRoom[] _storeRooms;
        private ERPSIA.AuxiliarAccount[] _branches;
        private ERPSIA.Tax _defaultTax;
        private ERPSIA.Document _cart;
        private Sale _currentSale;
        private List<DatosProducto> _carritoDeCompras;
        #endregion

        public WebServiceAgent()
        {
            _webService = new ERPSIA.PointOfSaleServiceContractClient();
        }

        /// <summary>
        /// Autentica al vendedor que ingresa a la página
        /// </summary>
        /// <param name="username">Usuario del vendedor</param>
        /// <param name="password">Contraseña del vendedor</param>
        /// <param name="company">Nombre de la compañía con la cual desea conectarse el vendedor</param>
        /// <returns></returns>
        public bool LogInSalesman(string username, string password, string branch)
        {
            return _webService.LogInCashier(username, password, branch);
        }

        public ERPSIA.AuxiliarAccount LogIn(string username, string password, string branch)
        {
            return _webService.LogIn(username, password, branch); 
        }

        public ERPSIA.Currency[] GetCurrencies()
        {
            if(_currencies == null)
                _currencies = _webService.GetCurrencies();
            return _currencies;
        }

        public ERPSIA.Item[] GetItems()
        {
            if (_items == null)
                _items = _webService.GetItems();
            return _items;
        }

        public ERPSIA.Item GetItem(int id)
        {
            if (_items == null)
                _items = _webService.GetItems();

            foreach(ERPSIA.Item item in _items)
            {
                if (item.Id == id)
                    return item;
            }

            return null;
        }

        /// <summary>
        /// Obtiene los clientes registrados en la empresa
        /// </summary>
        /// <returns></returns>
        public ERPSIA.AuxiliarAccount[] GetBranches()
        {
            if (_branches == null)
                _branches = _webService.GetBranches();
            return _branches;
        }

        /// <summary>
        /// Obtiene todos los items disponibles. Esto contiene la información de la cantidad de items por bodega, sus respectivas
        /// cuentas, fotografías, todo lo referente a artículos.
        /// </summary>
        /// <returns></returns>
        public ERPSIA.Item[] GetAvailableItems()
        {
            if (_items == null)
                _items = _webService.GetItems();
            return _items;
        }

        public ERPSIA.Document PreviewInvoiceDocument()
        {
            _cart = null;
            _cart = _webService.PreviewInvoiceDocument(ClientManager.GetInstance().Branch.AccountID, DateTime.Now, DateTime.Now, Constants.INVALID_ID,0,0,0, new ERPSIA.DocDetail[0]);
            return _cart;
        }

        public bool SaveClienInvoiceDocument(ERPSIA.Document doc)
        {
            return _webService.SaveClienInvoiceDocument(doc);            
        }

        /// <summary>
        /// Obtiene las bodegas existentes en la compañía
        /// </summary>
        /// <returns></returns>
        public ERPSIA.StoreRoom[] GetStoreRooms()
        {
            if (_storeRooms == null)
                _storeRooms = _webService.GetStoreRooms();
            return _storeRooms;
        }

        /// <summary>
        /// Obtiene el impuesto default a aplicar en las ordenes de venta.
        /// </summary>
        /// <returns></returns>
        public ERPSIA.Tax GetDefaultTax()
        {
            if (_defaultTax == null)
                _defaultTax = _webService.GetDefaultTax();
            return _defaultTax;
        }
    }
}